/**
 * CardR的查询结果转为可导出Excel的格式
 *
 * 输入参数:
 *      传递给CardR的参数
 *
 * 输出参数:
 *      符合Excel导入格式的数组
 */
(function () {

  // 获取位置对应的Excel列名
  function getName(index) {
    let chars = '';
    let count;
    do {
      count = (index - index % 26) / 26;
      chars = String.fromCharCode(65 + index % 26) + chars;
      index = count - 1;
    } while (count > 0)
    return chars;
  }

  return function (args, headers) {
    // 验证用户
    if (!args.UID) throw Error("无效会话");

    // 强制不分页
    args.PageSize = 0;

    // 获取数据
    let rows = A.job.CardR(args).Rows;

    // 格式转换
    let sheet1 = { '$Name': args.Card };

    if (rows.length > 0) {
      const keys = Object.keys(rows[0]);
      // 数据行
      for (let i = 0; i < rows.length; i++) {
        let record = rows[i];

        // 先添加标题行
        if (i === 0) {
          keys.forEach((k, c) => {
            sheet1[getName(c) + 1] = k;
          });
        }

        keys.forEach((k, c) => {
          sheet1[getName(c) + String(i + 2)] = record[k];
        });
      }
    }

    return [sheet1];
  };
})();